#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSystemTrayIcon>
#include <QTime>
#include <QTimer>
#include <QMenu>
#include <QAction>
#include <QCloseEvent>
#include <QListWidget>
#include <QSettings>
#include <QDir>
#include <QCoreApplication>
#include <QDateTime>
#include <QCheckBox>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

// 定义一个结构来保存单条提醒信息
struct Reminder {
    QDateTime time;
    QString message;
    bool triggered = false;
    bool isRecurring = false;  // 是否为周期性任务
    int recurringType = 0;     // 周期类型：0=一次性，1=每天重复
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private slots:
    void on_addButton_clicked(); // 添加按钮的槽函数
    void checkReminders();       // 定时检查提醒的槽函数
    void trayIconActivated(QSystemTrayIcon::ActivationReason reason); // 托盘图标激活槽函数
    void showWindow();           // 显示窗口
    void quitApplication();      // 退出应用程序
    void setPassword();          // 设置密码
    void onRecurringChanged();   // 周期性选择改变的槽函数
    void onReminderItemDoubleClicked(QListWidgetItem *item); // 双击提醒项的槽函数
    
    // 快捷时间设置槽函数
    void setQuickTime5Min();
    void setQuickTime15Min();
    void setQuickTime30Min();
    void setQuickTime1Hour();
    void setQuickTime2Hour();
    void setQuickTimeTomorrow();
    
    // 开机自启相关槽函数
    void toggleAutoStart();      // 切换开机自启状态
    
    // 免打扰相关槽函数
    void toggleDoNotDisturb2Hours(); // 2小时免打扰
    void toggleDoNotDisturb4Hours(); // 4小时免打扰
    void toggleDoNotDisturb8Hours(); // 8小时免打扰
    void disableDoNotDisturb();      // 关闭免打扰
    void onAutoStartToggled(bool checked);

protected:
    void closeEvent(QCloseEvent *event) override; // 重写关闭事件

private:
    Ui::MainWindow *ui;

    QTimer *m_timer; // 用于定期检查的定时器[6](@ref)
    QList<Reminder> m_reminders; // 存储所有提醒的列表
    
    // 系统托盘相关
    QSystemTrayIcon *m_trayIcon;
    QMenu *m_trayMenu;
    QAction *m_showAction;
    QAction *m_quitAction;
    
    // 开机自启相关
    QAction *m_autoStartAction;
    
    // 免打扰相关
    QAction *m_doNotDisturb2HAction;
    QAction *m_doNotDisturb4HAction;
    QAction *m_doNotDisturb8HAction;
    QAction *m_disableDoNotDisturbAction;
    QDateTime m_doNotDisturbEndTime;  // 免打扰结束时间

    void setupTimer();
    void updateReminderListDisplay();
    void setupTrayIcon();        // 设置系统托盘
    void saveReminders();        // 保存提醒数据
    void loadReminders();        // 加载提醒数据
    
    // 开机自启相关辅助函数
    bool isAutoStartEnabled();   // 检查是否已设置开机自启
    void setAutoStart(bool enabled); // 设置开机自启
    
    // 免打扰相关辅助函数
    bool isDoNotDisturbActive(); // 检查是否在免打扰时间内
    void updateDoNotDisturbMenu(); // 更新免打扰菜单状态

};
#endif // MAINWINDOW_H
